<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of class
 *
 * @author ������
 */
class ThemeUnit {

    public $data = array();
    private $template;
    private $registry;
     
    public function __construct($template) {
        $this->template = $template;
        $this->registry = Registry::getInstance();
       
        
    }
    
//    public function __call($name, $args) {
//        if (stripos($name, 'add')!==FALSE) {
//            $name = strtolower(str_replace('add', '', $name));
//            $this->data[$name][] = $args[0];
//        }
//    }

    
    public function flush() {
        unset($this->data['html']);
    }
    
    
    public function add($data) {  
        $this->data = array_merge_recursive($this->data, $data);
    }
    /**
     *
     * @param type $theme название шаблона в котором нужно искать запрашивуемую html
     * @param type $relative_theme_path путь до папки где лежит шаблон относительно базовой директории темы
     * @param type $template_name название темы который нужно подгрузить из указанной папки
     * @param type $args аргументы которые будут переданы в шаблон
     * @param type $type тип шаблона
     * @return type 
     */
    public function getHTMLFromPath($action,$theme, $relative_theme_path, $template_name, $args = array(), $type='region') {
        extract($args);

        ob_start();

        if ($type == 'view')
            require_once DIR_TEMPLATES . $theme . "/" . $relative_theme_path . "/" . $template_name . ".tpl.php";
        else
            require_once DIR_TEMPLATES . $theme . "/" . $relative_theme_path . "/" . $this->findPageTemplate($action, DIR_TEMPLATES . THEME . '/' . $relative_theme_path) . ".tpl.php";
            
       
        
        $html = ob_get_contents();
        ob_end_clean();
        return $html;
    }


    public static function findPageTemplate($action, $path_to_pages) {
        $args = (array) $action->getArgs();

        $iterator = new DirectoryIterator($path_to_pages);
        while ($needle_template = implode('-', $args)) {
            foreach ($iterator as $template) {
                if (!$template->isFile())
                    continue;
                
                $template_name = preg_replace('/.tpl.php/iu', '', $template->getBasename());
                $template_name = preg_replace('/base-/iu', '', $template_name);
                if($template_name == $needle_template)
                {
                    return 'base-'.$template_name;
                }
            }
            unset($args[count($args)-1]);
            $iterator->rewind();
        }
        return 'base';
//        //echo "Контроллер - ".$controller_name."<br/>";
//        
//        $controller_method_and_args = $controller_args;
//        
//        $depth = 0;
//        $max_depth = 0;
//        $current_template = "base";
//
//        
//        $iterator = new DirectoryIterator($path_to_pages);
//        foreach ($iterator as $template) {
//            if (!$template->isFile())
//                continue;
//            
//            $template_name = preg_replace('/.tpl.php/iu', '', $template->getBasename());
//            //echo 'Текущий шаблон - '.$template_name.'<br>';
//
//            $template_name_parts = explode('-', $template_name);
//            //убираем base из названия файла
//            array_shift($template_name_parts);
//            //если первый элемент названия файла равен названию контрола
//            
//            if (isset($template_name_parts[0]) && $controller_method_and_args[0] == $template_name_parts[0]) {
//
//                //echo'$controller_name = $template_name_parts[0]: '.$controller_name .' = '. $template_name_parts[0].'<br>';
//                
//                //убираем из имени имя контрола
//                array_shift($template_name_parts);
//   
//                //echo 'метод контроллера - '.$controller_method[0].'<br/>';
//                //echo 'аргументы - '.  print_r($controller_method_and_args, true).'<br/>';
//                
////                if($controller_method[0] == 'index')
////                {
////                    array_shift($controller_method_and_args);
////                }
//                $depth = 0;
//                foreach ($controller_method_and_args as $key => $value) {
//
//                    if (isset($template_name_parts[$key]) && $controller_method_and_args[$key] == $template_name_parts[$key]) {
//                       //echo"сравниваем ".$controller_method_and_args[$key]." c ".$template_name_parts[$key]."<br>";
//                        $depth++;
//                    }
//                }
//                //echo 'длина $template_name_parts - '.  count($template_name_parts).'<br/>';
//                if ($depth >= $max_depth && $depth==count($template_name_parts)) {
//                    $current_template = $template_name;
//                    //echo"установлен шаблон ".$current_template."<br/>";
//                    $max_depth = $depth;
//                }
//            }
//        }
//        
//        return $current_template;
    }
    public function setTemplate($template) {
        $this->template = $template;
    }
    public function renderPage($action) {
        $data = &$this->data;
       // $this->insetRegionsInToTemplates('', $data);
        $current_theme_data = $this->registry->themes[THEME];
        
        $base = self::getHTMLFromPath($action, THEME, 'html/base', 'base', $data);
        foreach ($current_theme_data['regions'] as $key =>$value) {
           $region = self::getHTMLFromPath($action, THEME, 'html/regions/'.$value, 'base', $data);
           $base = str_replace('{'.$value.'}', $region, $base); 
        }
        echo $base;
        
//        $action = $this->registry->router->getCurrentAction();
//        $path_to_pages = DIR_TEMPLATES . $this->template . '/pages';
//        $page_template = $this->findPageTemplate($action, $path_to_pages);  
//
//        
//        $data['dir_template'] = HTTP_SERVER . "templates/".$this->template."/";
//        
//        switch ($this->template) {
//            case 'none':
//                $tojson = array();
//                $tojson['heap'] = @$data['heap'];
//                $tojson['messages'] = @$data['messages'];
//                echo json_encode($tojson);
//                break;
//            default :
//                $data['action'] = $action;
//                $this->registry->hook->invokeAll('beforepagebuild', $data);
//                ob_start();
//                require_once $path_to_pages . '/' . $page_template . '.tpl.php';
//                $data['page'] = ob_get_contents();
//                ob_end_clean();
//                require_once DIR_TEMPLATES . 'standart/index.tpl.php';
//                break;
//        }
//        exit();
    }
}

?>
